/*
给出一个字符串，从字符串起始位遍历到最后一位，若起始位至当前位能被一个前缀串循环 n 次组成，则输出当前位的位置和 n。（n≥2）
*/

#include<iostream>
using namespace std;

#define MAX_N 1000000

char str[MAX_N+5];
int nxt[MAX_N+5];

void get_next(char*s,int*nxt){
	int j=-1;
	nxt[0]=-1;
	for(int i=1;s[i];i++){
		while(j!=-1&&s[i]!=s[j+1])j=nxt[j];
		if(s[i]==s[j+1])j+=1;
		nxt[i]=j;
	}
	return;
}

int main(){
	int l;
	scanf("%d",&l);
	scanf("%s",str);
	get_next(str,nxt);
	for(int i=1;str[i];i++){
		int n=i+1,m=n-nxt[i]-1;
		if(n%m==0&&n/m>1){
			printf("%d %d\n",i+1,n/m);
		}
	}
	
	return 0;
}
